﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharpArch.Core.PersistenceSupport;
using SharpArch.Core.DomainModel;

namespace zeus.Core.RepositoryInterfaces
{
    public interface IUsuarioRepository : IRepository<Usuario>
    {
        bool IsInRole(string userName, string role);

        bool UsuarioDuplicado(Usuario usuario);

        IList<Usuario> GetByCliente(int ClienteID);

        IList<Grupo> GetDisponiblesByGrupo(int ClienteID, PlanCliente planCliente);
        
        IList<Grupo> GetSeleccionadosByGrupo(int ClienteID, PlanCliente planCliente);

        IList<Usuario> GetDisponiblesByUnidad(int ClienteID, Unidad unidad);

        IList<Usuario> GetSeleccionadosByUnidad(int ClienteID, Unidad unidad);        

        IList<Usuario> GetDisponiblesByGrupo(int ClienteID, Grupo grupo);

        IList<Usuario> GetSeleccionadosByGrupo(int ClienteID, Grupo grupo);

        List<int> GetReportes(Usuario usuario);

        /// <summary>
        /// Determina si un usuario tiene asignado un reporte
        /// </summary>
        /// <param name="usuario"></param>
        /// <param name="codigoReporte"></param>
        /// <returns></returns>
        bool TieneReporte(Usuario usuario, int codigoReporte);

        void InsertOrUpdateReporte(Usuario usuario, int codigoReporte, bool seleccionado);

        void DeleteAllPlanDisponible(PlanCliente planCliente);
    }
}
